#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;

#define all(o) (o).begin(), (o).end()
#define allr(o) (o).rbegin(), (o).rend()
const int INF = 2147483647;
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
template <class T> int size(T &x) { return x.size(); }

// assert or gtfo


ll egcd(ll a, ll b, ll& x, ll& y) {
    if (b == 0) { x = 1; y = 0; return a; }
    else {
        ll d = egcd(b, a % b, x, y);
        x -= a / b * y;
        swap(x, y);
        return d;
    }
}

ll mod_inv(ll a, ll m) {
    ll x, y, d = egcd(a, m, x, y);
    if (d != 1) return -1;
    return x < 0 ? x + m : x;
}

ll mod = 1000000007;

ll cnt[2010][2010];
// ll bin[2010][]

ll fact[2010];

ll binomial(ll n, ll k) {
    // return (((fact[n] * mod_inv(k, mod)) % mod) * mod_inv(n - k, mod)) % mod;

    ll res = 1;
    for (int i = 1; i <= k; i++) {
        res *= (n - k + i) % mod;
        res %= mod;
        res *= mod_inv(i, mod);
        res %= mod;
    }
    return res;
}

int main()
{
    ll n, d, x;
    while (cin >> n >> d >> x && !(n == 0 && d == 0 && x == 0)) {

        memset(cnt, 0, sizeof(cnt));

//         ll **cnt = new ll*[n + 1];
//         for (int i = 0; i <= n; i++) {
//             cnt[i] = new ll[n + 1];
//             for (int j = 0; j <= n; j++) {
//                 cnt[i][j] = 0;
//             }
//         }

        // cout << "A" << endl;

        for (int i = 0; i <= n; i++) {
            ll acc = 0;
            for (int j = 0; j <= n; j++) {
                if (i == 0) {
                    cnt[i][j] = j == 0 ? 1 : 0;
                } else {
                    // cnt[i][j] = 0;
                    cnt[i][j] = acc;
                    // for (int k = 1; k < x && j - k >= 0; k++) {
                    //     cnt[i][j] += cnt[i-1][j-k];
                    //     cnt[i][j] %= mod;
                    //     // if (cnt[i][j] >= mod)
                    //     //     cnt[i][j] -= mod;
                    // }

                    acc += cnt[i-1][j];
                    if (j - (x - 1) >= 0) {
                        acc -= cnt[i-1][j-(x-1)];
                    }
                    acc = (acc % mod + mod) % mod;
                }
            }
        }

        // cout << "B" << endl;

        ll res = 0;
        for (int i = 0; i <= n; i++) {
            res += cnt[i][n] * binomial(d, i);
            res %= mod;
        }

        // cout << "C" << endl;

        cout << res << endl;
    }

    return 0;
}

